home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 076-100 / disk_099 / a-render / build_objects / balpha.c next >
C/C++ Source or Header  |  1992-05-06  |  15KB  |  475 lines

  1.  
  2. /*
  3. **
  4. **  A 'C' Source File Demonstrating How to Build Objects for A-Render
  5. **
  6. */
  7.  
  8.  
  9. #include <stdio.h>
  10.  
  11.  
  12. /*  Constants to dimension our arrays  */
  13. #define OBJ_VERT_ARRAY_SIZE 46
  14. #define OBJ_POLY_ARRAY_SIZE 41
  15. #define OBJ_POLY_VERT_ARRAY_SIZE 9
  16.  
  17. /* Define a data structure for use */
  18. struct Object {
  19.   int  id;
  20.   int  type;
  21.   int  polygon_count;
  22.   int  vertice_count;
  23.   int  polygon_vertice_count[OBJ_POLY_ARRAY_SIZE];
  24.   int  vertice_list[OBJ_POLY_ARRAY_SIZE] [OBJ_POLY_VERT_ARRAY_SIZE];
  25.   float  vertice_x[OBJ_VERT_ARRAY_SIZE];
  26.   float  vertice_y[OBJ_VERT_ARRAY_SIZE];
  27.   float  vertice_z[OBJ_VERT_ARRAY_SIZE];
  28. };
  29.  
  30.  
  31. /*  Define a variable named 'object', of a structure of type 'Object'  */
  32. struct Object object;
  33.  
  34.  
  35. main()
  36. {
  37. FILE *fopen(), *fp;
  38.  
  39. int polygon_id,
  40.     vertice_id,
  41.     vlist_id,
  42.     this_object_id = 1;
  43.     
  44. /************           Start your changes here!            **********/
  45. /*  Be sure to set these  */
  46. /*  two values.           */
  47.   object.polygon_count = 28;
  48.   object.vertice_count = 40;
  49.  
  50.  
  51. /*  Now just explicitly set up the XYZ values       */
  52. /*  for our object vertice points.  (40 vertices)   */
  53.     object.vertice_x [1] = -3.75;
  54.     object.vertice_y [1] = -4.;
  55.     object.vertice_z [1] = -.5;
  56.  
  57.     object.vertice_x [2] = -3.75;
  58.     object.vertice_y [2] = -3.5;
  59.     object.vertice_z [2] = -.5;
  60.  
  61.     object.vertice_x [3] = -3.;
  62.     object.vertice_y [3] = -3.5;
  63.     object.vertice_z [3] = -.5;
  64.  
  65.     object.vertice_x [4] =  1.25;
  66.     object.vertice_y [4] =  2.75;
  67.     object.vertice_z [4] = -.5;
  68.  
  69.     object.vertice_x [5] =  1.25;
  70.     object.vertice_y [5] =  1.5;
  71.     object.vertice_z [5] = -.5;
  72.  
  73.     object.vertice_x [6] = -2.;
  74.     object.vertice_y [6] = -3.5;
  75.     object.vertice_z [6] = -.5;
  76.  
  77.     object.vertice_x [7] = -1.25;
  78.     object.vertice_y [7] = -3.5;
  79.     object.vertice_z [7] = -.5;
  80.  
  81.     object.vertice_x [8] = -1.25;
  82.     object.vertice_y [8] = -4.;
  83.     object.vertice_z [8] = -.5;
  84.  
  85.     object.vertice_x [9] =  2.;
  86.     object.vertice_y [9] =  4.;
  87.     object.vertice_z [9] = -.5;
  88.  
  89.     object.vertice_x [10] =  3.;
  90.     object.vertice_y [10] =  4.;
  91.     object.vertice_z [10] = -.5;
  92.  
  93.     object.vertice_x [11] =  3.;
  94.     object.vertice_y [11] = -3.5;
  95.     object.vertice_z [11] = -.5;
  96.  
  97.     object.vertice_x [12] =  3.75;
  98.     object.vertice_y [12] = -3.5;
  99.     object.vertice_z [12] = -.5;
  100.  
  101.     object.vertice_x [13] =  3.75;
  102.     object.vertice_y [13] =  -4.;
  103.     object.vertice_z [13] = -.5;
  104.  
  105.     object.vertice_x [14] =  .5;
  106.     object.vertice_y [14] = -4.;
  107.     object.vertice_z [14] = -.5;
  108.  
  109.     object.vertice_x [15] =  .5;
  110.     object.vertice_y [15] = -3.5;
  111.     object.vertice_z [15] = -.5;
  112.  
  113.     object.vertice_x [16] =  1.25;
  114.     object.vertice_y [16] = -3.5;
  115.     object.vertice_z [16] = -.5;
  116.  
  117.     object.vertice_x [17] = -1.;
  118.     object.vertice_y [17] =  -2.;
  119.     object.vertice_z [17] = -.5;
  120.  
  121.     object.vertice_x [18] = -.5;
  122.     object.vertice_y [18] = -1.;
  123.     object.vertice_z [18] = -.5;
  124.  
  125.     object.vertice_x [19] =  1.25;
  126.     object.vertice_y [19] = -1.;
  127.     object.vertice_z [19] = -.5;
  128.  
  129.     object.vertice_x [20] =  1.25;
  130.     object.vertice_y [20] = -2.;
  131.     object.vertice_z [20] = -.5;
  132.  
  133.     object.vertice_x [21] = -3.75;
  134.     object.vertice_y [21] = -4.;
  135.     object.vertice_z [21] =  .5;
  136.  
  137.     object.vertice_x [22] = -3.75;
  138.     object.vertice_y [22] = -3.5;
  139.     object.vertice_z [22] =  .5;
  140.  
  141.     object.vertice_x [23] = -3.;
  142.     object.vertice_y [23] = -3.5;
  143.     object.vertice_z [23] =  .5;
  144.  
  145.     object.vertice_x [24] =  1.25;
  146.     object.vertice_y [24] =  2.75;
  147.     object.vertice_z [24] =  .5;
  148.  
  149.     object.vertice_x [25] =  1.25;
  150.     object.vertice_y [25] =  1.5;
  151.     object.vertice_z [25] =  .5;
  152.  
  153.     object.vertice_x [26] = -2.;
  154.     object.vertice_y [26] = -3.5;
  155.     object.vertice_z [26] =  .5;
  156.  
  157.     object.vertice_x [27] = -1.25;
  158.     object.vertice_y [27] = -3.5;
  159.     object.vertice_z [27] =  .5;
  160.  
  161.     object.vertice_x [28] = -1.25;
  162.     object.vertice_y [28] = -4.;
  163.     object.vertice_z [28] =  .5;
  164.  
  165.     object.vertice_x [29] =  2.;
  166.     object.vertice_y [29] =  4.;
  167.     object.vertice_z [29] =  .5;
  168.  
  169.     object.vertice_x [30] =  3.;
  170.     object.vertice_y [30] =  4.;
  171.     object.vertice_z [30] =  .5;
  172.  
  173.     object.vertice_x [31] =  3.;
  174.     object.vertice_y [31] = -3.5;
  175.     object.vertice_z [31] =  .5;
  176.  
  177.     object.vertice_x [32] =  3.75;
  178.     object.vertice_y [32] = -3.5;
  179.     object.vertice_z [32] =  .5;
  180.  
  181.     object.vertice_x [33] =  3.75;
  182.     object.vertice_y [33] =  -4.;
  183.     object.vertice_z [33] =  .5;
  184.  
  185.     object.vertice_x [34] =  .5;
  186.     object.vertice_y [34] = -4.;
  187.     object.vertice_z [34] =  .5;
  188.  
  189.     object.vertice_x [35] =  .5;
  190.     object.vertice_y [35] = -3.5;
  191.     object.vertice_z [35] =  .5;
  192.  
  193.     object.vertice_x [36] =  1.25;
  194.     object.vertice_y [36] = -3.5;
  195.     object.vertice_z [36] =  .5;
  196.  
  197.     object.vertice_x [37] = -1.;
  198.     object.vertice_y [37] =  -2.;
  199.     object.vertice_z [37] =  .5;
  200.  
  201.     object.vertice_x [38] = -.5;
  202.     object.vertice_y [38] = -1.;
  203.     object.vertice_z [38] =  .5;
  204.  
  205.     object.vertice_x [39] =  1.25;
  206.     object.vertice_y [39] = -1.;
  207.     object.vertice_z [39] =  .5;
  208.  
  209.     object.vertice_x [40] =  1.25;
  210.     object.vertice_y [40] = -2.;
  211.     object.vertice_z [40] =  .5;
  212.  
  213.  
  214.  
  215.  
  216.  
  217. /*  Now each polygon's vertice list just indexes the points         */
  218. /*  listed above by the subscript of the vertice.  Each polygon     */
  219. /*  has a vertice count also.  A four sided polygon is considered   */
  220. /*  to have five vertices, the starting vertice, following around   */
  221. /*  thru the second, third and fourth vertice, and ending by        */ 
  222. /*  duplicating the first vertice as the last.                      */
  223. /*  This first polygon is a four sided polygon, as most are.        */
  224.       object.polygon_vertice_count [1] = 5;
  225.       object.vertice_list [1] [1] = 1;
  226.       object.vertice_list [1] [2] = 21;
  227.       object.vertice_list [1] [3] = 22;
  228.       object.vertice_list [1] [4] = 2;
  229.       object.vertice_list [1] [5] = 1;
  230.  
  231.       object.polygon_vertice_count [2] = 5;
  232.       object.vertice_list [2] [1] = 2;
  233.       object.vertice_list [2] [2] = 22;
  234.       object.vertice_list [2] [3] = 23;
  235.       object.vertice_list [2] [4] = 3;
  236.       object.vertice_list [2] [5] = 2;
  237.  
  238.       object.polygon_vertice_count [3] = 5;
  239.       object.vertice_list [3] [1] = 3;
  240.       object.vertice_list [3] [2] = 23;
  241.       object.vertice_list [3] [3] = 24;
  242.       object.vertice_list [3] [4] = 4;
  243.       object.vertice_list [3] [5] = 3;
  244.  
  245.       object.polygon_vertice_count [4] = 5;
  246.       object.vertice_list [4] [1] = 5;
  247.       object.vertice_list [4] [2] = 25;
  248.       object.vertice_list [4] [3] = 26;
  249.       object.vertice_list [4] [4] = 6;
  250.       object.vertice_list [4] [5] = 5;
  251.  
  252.       object.polygon_vertice_count [5] = 5;
  253.       object.vertice_list [5] [1] = 6;
  254.       object.vertice_list [5] [2] = 26;
  255.       object.vertice_list [5] [3] = 27;
  256.       object.vertice_list [5] [4] = 7;
  257.       object.vertice_list [5] [5] = 6;
  258.  
  259.       object.polygon_vertice_count [6] = 5;
  260.       object.vertice_list [6] [1] = 7;
  261.       object.vertice_list [6] [2] = 27;
  262.       object.vertice_list [6] [3] = 28;
  263.       object.vertice_list [6] [4] = 8;
  264.       object.vertice_list [6] [5] = 7;
  265.  
  266.       object.polygon_vertice_count [7] = 5;
  267.       object.vertice_list [7] [1] = 8;
  268.       object.vertice_list [7] [2] = 28;
  269.       object.vertice_list [7] [3] = 21;
  270.       object.vertice_list [7] [4] = 1;
  271.       object.vertice_list [7] [5] = 8;
  272.  
  273.       object.polygon_vertice_count [8] = 5;
  274.       object.vertice_list [8] [1] = 14;
  275.       object.vertice_list [8] [2] = 34;
  276.       object.vertice_list [8] [3] = 35;
  277.       object.vertice_list [8] [4] = 15;
  278.       object.vertice_list [8] [5] = 14;
  279.  
  280.       object.polygon_vertice_count [9] = 5;
  281.       object.vertice_list [9] [1] = 15;
  282.       object.vertice_list [9] [2] = 35;
  283.       object.vertice_list [9] [3] = 36;
  284.       object.vertice_list [9] [4] = 16;
  285.       object.vertice_list [9] [5] = 15;
  286.  
  287.       object.polygon_vertice_count [10] = 5;
  288.       object.vertice_list [10] [1] = 16;
  289.       object.vertice_list [10] [2] = 36;
  290.       object.vertice_list [10] [3] = 24;
  291.       object.vertice_list [10] [4] = 4;
  292.       object.vertice_list [10] [5] = 16;
  293.  
  294.       object.polygon_vertice_count [11] = 5;
  295.       object.vertice_list [11] [1] = 4;
  296.       object.vertice_list [11] [2] = 24;
  297.       object.vertice_list [11] [3] = 29;
  298.       object.vertice_list [11] [4] = 9;
  299.       object.vertice_list [11] [5] = 4;
  300.  
  301.       object.polygon_vertice_count [12] = 5;
  302.       object.vertice_list [12] [1] = 9;
  303.       object.vertice_list [12] [2] = 29;
  304.       object.vertice_list [12] [3] = 30;
  305.       object.vertice_list [12] [4] = 10;
  306.       object.vertice_list [12] [5] = 9;
  307.  
  308.       object.polygon_vertice_count [13] = 5;
  309.       object.vertice_list [13] [1] = 10;
  310.       object.vertice_list [13] [2] = 30;
  311.       object.vertice_list [13] [3] = 31;
  312.       object.vertice_list [13] [4] = 11;
  313.       object.vertice_list [13] [5] = 10;
  314.  
  315.       object.polygon_vertice_count [14] = 5;
  316.       object.vertice_list [14] [1] = 11;
  317.       object.vertice_list [14] [2] = 31;
  318.       object.vertice_list [14] [3] = 32;
  319.       object.vertice_list [14] [4] = 12;
  320.       object.vertice_list [14] [5] = 11;
  321.  
  322.       object.polygon_vertice_count [15] = 5;
  323.       object.vertice_list [15] [1] = 12;
  324.       object.vertice_list [15] [2] = 32;
  325.       object.vertice_list [15] [3] = 33;
  326.       object.vertice_list [15] [4] = 13;
  327.       object.vertice_list [15] [5] = 12;
  328.  
  329.       object.polygon_vertice_count [16] = 5;
  330.       object.vertice_list [16] [1] = 13;
  331.       object.vertice_list [16] [2] = 33;
  332.       object.vertice_list [16] [3] = 34;
  333.       object.vertice_list [16] [4] = 14;
  334.       object.vertice_list [16] [5] = 13;
  335.  
  336.       object.polygon_vertice_count [17] = 5;
  337.       object.vertice_list [17] [1] = 18;
  338.       object.vertice_list [17] [2] = 38;
  339.       object.vertice_list [17] [3] = 39;
  340.       object.vertice_list [17] [4] = 19;
  341.       object.vertice_list [17] [5] = 18;
  342.  
  343.       object.polygon_vertice_count [18] = 5;
  344.       object.vertice_list [18] [1] = 20;
  345.       object.vertice_list [18] [2] = 40;
  346.       object.vertice_list [18] [3] = 37;
  347.       object.vertice_list [18] [4] = 17;
  348.       object.vertice_list [18] [5] = 20;
  349.  
  350.       object.polygon_vertice_count [19] = 5;
  351.       object.vertice_list [19] [1] = 17;
  352.       object.vertice_list [19] [2] = 18;
  353.       object.vertice_list [19] [3] = 19;
  354.       object.vertice_list [19] [4] = 20;
  355.       object.vertice_list [19] [5] = 17;
  356.  
  357.       object.polygon_vertice_count [20] = 6;
  358.       object.vertice_list [20] [1] = 16;
  359.       object.vertice_list [20] [2] = 4;
  360.       object.vertice_list [20] [3] = 9;
  361.       object.vertice_list [20] [4] = 10;
  362.       object.vertice_list [20] [5] = 11;
  363.       object.vertice_list [20] [6] = 16;
  364.  
  365.       object.polygon_vertice_count [21] = 5;
  366.       object.vertice_list [21] [1] = 3;
  367.       object.vertice_list [21] [2] = 4;
  368.       object.vertice_list [21] [3] = 5;
  369.       object.vertice_list [21] [4] = 6;
  370.       object.vertice_list [21] [5] = 3;
  371.  
  372.       object.polygon_vertice_count [22] = 5;
  373.       object.vertice_list [22] [1] = 1;
  374.       object.vertice_list [22] [2] = 2;
  375.       object.vertice_list [22] [3] = 7;
  376.       object.vertice_list [22] [4] = 8;
  377.       object.vertice_list [22] [5] = 1;
  378.  
  379.       object.polygon_vertice_count [23] = 5;
  380.       object.vertice_list [23] [1] = 14;
  381.       object.vertice_list [23] [2] = 15;
  382.       object.vertice_list [23] [3] = 12;
  383.       object.vertice_list [23] [4] = 13;
  384.       object.vertice_list [23] [5] = 14;
  385.  
  386.       object.polygon_vertice_count [24] = 5;
  387.       object.vertice_list [24] [1] = 40;
  388.       object.vertice_list [24] [2] = 39;
  389.       object.vertice_list [24] [3] = 38;
  390.       object.vertice_list [24] [4] = 37;
  391.       object.vertice_list [24] [5] = 40;
  392.  
  393.       object.polygon_vertice_count [25] = 6;
  394.       object.vertice_list [25] [1] = 31;
  395.       object.vertice_list [25] [2] = 30;
  396.       object.vertice_list [25] [3] = 29;
  397.       object.vertice_list [25] [4] = 24;
  398.       object.vertice_list [25] [5] = 36;
  399.       object.vertice_list [25] [6] = 31;
  400.  
  401.       object.polygon_vertice_count [26] = 5;
  402.       object.vertice_list [26] [1] = 26;
  403.       object.vertice_list [26] [2] = 25;
  404.       object.vertice_list [26] [3] = 24;
  405.       object.vertice_list [26] [4] = 23;
  406.       object.vertice_list [26] [5] = 26;
  407.  
  408.       object.polygon_vertice_count [27] = 5;
  409.       object.vertice_list [27] [1] = 28;
  410.       object.vertice_list [27] [2] = 27;
  411.       object.vertice_list [27] [3] = 22;
  412.       object.vertice_list [27] [4] = 21;
  413.       object.vertice_list [27] [5] = 28;
  414.  
  415.       object.polygon_vertice_count [28] = 5;
  416.       object.vertice_list [28] [1] = 33;
  417.       object.vertice_list [28] [2] = 32;
  418.       object.vertice_list [28] [3] = 35;
  419.       object.vertice_list [28] [4] = 34;
  420.       object.vertice_list [28] [5] = 33;
  421.  
  422. /*******      You shouldn't need to make changes past here,      *******/
  423. /*             unless you want to change the file name to              */
  424. /*               be more meaningful for your object.                   */
  425. /*                     (Change in two places)                          */
  426.  
  427. /*  Now the object is saved to a file  */
  428.  
  429.     /*  Open file  */
  430.     fp = fopen("a.obj","w");
  431.  
  432.  
  433. /* The following fprintf statement puts the object file header to disk. */
  434. /* The first '1' means there is 1 object in this file.                  */
  435. /* The second value identifies which object this is in the object file. */
  436. /* The '3' identifies this as an alpha object, built from polygons.     */
  437. /* Object '2' is a general polygonal object.  Be sure to use a 2 or 3!  */
  438. /* Object types 2 and 3 are the only ones supported in A-Render v.3.    */
  439. /* After, the polygon and object counts are written to the file.        */
  440.           fprintf(fp,"1 %d 3 %d %d",    
  441.                   this_object_id,
  442.                   object.polygon_count,
  443.                   object.vertice_count);
  444.  
  445. /*  Now just save the object verticies!  */
  446.       for (vertice_id=1;
  447.       vertice_id <= object.vertice_count; vertice_id++) {
  448.         fprintf(fp," %f %f %f",
  449.           object.vertice_x [vertice_id],
  450.           object.vertice_y [vertice_id],
  451.           object.vertice_z [vertice_id]);
  452.       }
  453.  
  454. /*  And save the polygons.  */
  455.       for (polygon_id=1; 
  456.       polygon_id <= object.polygon_count; polygon_id++) {
  457.  
  458.         fprintf(fp," %d",
  459.           object.polygon_vertice_count [polygon_id]);
  460.  
  461.         for (vlist_id=1;
  462.         vlist_id <= object.polygon_vertice_count [polygon_id];
  463.         vlist_id++) {
  464.           fprintf(fp," %d",
  465.             object.vertice_list [polygon_id] [vlist_id]);
  466.         }
  467.       }
  468.  
  469. /*  Close  */
  470.     printf("\n");
  471.     fclose(fp);
  472.     printf("a.obj written\n");
  473. }
  474.  
  475.